# -*- coding: utf-8 -*-
# time: 2025/3/26 08:52
# file: llm_qwen_interl.py
# author: hanson
"""
conda activate pyenv
conda install llama_index modelscope
conda install llama_index llama-index-embeddings-huggingface llama-index-embeddings-instructor
https://modelscope.cn/my/mynotebook
https://blog.csdn.net/qq_41884932/article/details/140810516
 conda install modelscope  llama-index llama-index-embeddings-huggingface llama-index-llms-huggingface
 llama-index-llm-huggingface
"""
from llama_index.core import Settings, SimpleDirectoryReader, VectorStoreIndex
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLM  # 更新导入路径

# 初始化一个HuggingFaceEmbedding对象，用于将文本转换为向量表示
# 指定了一个预训练的sentence-transformer模型的路径
embed_model = HuggingFaceEmbedding(
    model_name=r"E:\soft\embedding\Ceceliachenen\paraphrase-multilingual-MiniLM-L12-v2"
)
Settings.embed_model = embed_model

# 使用 HuggingFace 加载本地模型
llm = HuggingFaceLLM(
    model_name=r"E:\soft\model\qwen\Qwen\Qwen2___5-1___5B-Instruct",
    tokenizer_name=r"E:\soft\model\qwen\Qwen\Qwen2___5-1___5B-Instruct",
    model_kwargs={"trust_remote_code": True},
    tokenizer_kwargs={"trust_remote_code": True}
)
# 设置全局的llm属性。这样在索引查询时就会使用该模型
Settings.llm = llm

# 从指定目录读取所有文档，并加载数据到内存中
documents = SimpleDirectoryReader("F:/workspace/py_project/intellect/llm/data", required_exts=[".md"]).load_data()

# AGR系统构建过程
# 创建一个VectorStoreIndex，并使用之前加载的文档来构建索引
# 此索引将文档转换为向量，并存储这些向量以便于快速检索
# 默认是存储在内存中的
index = VectorStoreIndex.from_documents(documents)

# 创建一个查询引擎，这个引擎可以接收查询并返回相关文档的响应
query_engine = index.as_query_engine()
response = query_engine.query("MyBatis-Plus 支持数据库")
print(response)